package com.yuw.collectionsdemo;

import java.util.*;

public class TestDriverMap {
    public static void main(String[] args) {
        //map集合
        System.out.println("--------------------------------");
        test01();
        System.out.println("--------------------------------");
        test02();
        System.out.println("--------------------------------");
        test03();
    }

    /**
     * Map接口——hashMap子类
     */
    public static void test03() {
        // 创建hashMap的实例对象
        Map map = new TreeMap();

        // 存入元素
        map.put("zhangsan", "2020001");
        map.put("lisi", "2020002");
        map.put("wangwu", "2020003");
        map.put("zhaoliu", "2020004");
        // 重复元素
        map.put("zhaoliu", "2020005");
        // 加入null值
        //map.put(null, null);
        // 取出和遍历元素


        System.out.println("使用Iterator进行Map集合的遍历(EntrySet)：");
        // 使用迭代器进行遍历Map集合中的元素
        // 获取Map对象的所有的Entry集合set
        Set setEntries = map.entrySet();
        // 将对Map集合的遍历转变为对EntrySet集合的遍历
        Iterator it = setEntries.iterator();
        // 遍历 hasNext方法用于判定后面还有没有相关的数据；next方法用于取出当前遍历的位置的元素值
        while (it.hasNext()) {
            // 使用next方法取出当前元素的值  当前元素是一个 Map.Entry 静态内部类（接口）
            Object obj = it.next();
            // 进行强制类型转换
            Map.Entry en = (Map.Entry) obj;

            System.out.println(en.getKey() + "--" + en.getValue());
        }

        System.out.println("使用Iterator进行Map集合的遍历(KeySet)：");
        // 使用迭代器进行遍历Map集合中的元素
        // 获取Map对象的所有的Key集合set
        Set setKeys = map.keySet();
        // 将对Map集合的遍历转变为对EntrySet集合的遍历
        Iterator it0 = setKeys.iterator();
        // 遍历 hasNext方法用于判定后面还有没有相关的数据；next方法用于取出当前遍历的位置的元素值
        while (it0.hasNext()) {
            // 使用next方法取出当前元素的值  当前元素是map中键值对的key值
            Object obj = it0.next();
            System.out.println(obj + "--" + map.get(obj));
        }

        // 课堂作业：
//        System.out.println("使用foreach增强型的for循环进行遍历：");
//        for (Object obj : set) {
//            System.out.println("  " + obj);
//        }
    }

    /**
     * Map接口——linkedhashMap子类
     */
    public static void test02() {
        // 创建hashMap的实例对象
        Map map = new LinkedHashMap();

        // 存入元素
        map.put("zhangsan", "2020001");
        map.put("lisi", "2020002");
        map.put("wangwu", "2020003");
        map.put("zhaoliu", "2020004");
        // 重复元素
        map.put("zhaoliu", "2020005");
        // 加入null值
        map.put(null, null);
        // 取出和遍历元素


        System.out.println("使用Iterator进行Map集合的遍历(EntrySet)：");
        // 使用迭代器进行遍历Map集合中的元素
        // 获取Map对象的所有的Entry集合set
        Set setEntries = map.entrySet();
        // 将对Map集合的遍历转变为对EntrySet集合的遍历
        Iterator it = setEntries.iterator();
        // 遍历 hasNext方法用于判定后面还有没有相关的数据；next方法用于取出当前遍历的位置的元素值
        while (it.hasNext()) {
            // 使用next方法取出当前元素的值  当前元素是一个 Map.Entry 静态内部类（接口）
            Object obj = it.next();
            // 进行强制类型转换
            Map.Entry en = (Map.Entry) obj;

            System.out.println(en.getKey() + "--" + en.getValue());
        }

        System.out.println("使用Iterator进行Map集合的遍历(KeySet)：");
        // 使用迭代器进行遍历Map集合中的元素
        // 获取Map对象的所有的Key集合set
        Set setKeys = map.keySet();
        // 将对Map集合的遍历转变为对EntrySet集合的遍历
        Iterator it0 = setKeys.iterator();
        // 遍历 hasNext方法用于判定后面还有没有相关的数据；next方法用于取出当前遍历的位置的元素值
        while (it0.hasNext()) {
            // 使用next方法取出当前元素的值  当前元素是map中键值对的key值
            Object obj = it0.next();
            System.out.println(obj + "--" + map.get(obj));
        }

        // 课下作业：
//        System.out.println("使用foreach增强型的for循环进行遍历：");
//        for (Object obj : set) {
//            System.out.println("  " + obj);
//        }
    }
    /**
     * Map接口——hashMap子类
     */
    public static void test01() {
        // 创建hashMap的实例对象
        Map map = new HashMap();

        // 存入元素
        map.put("zhangsan", "2020001");
        map.put("lisi", "2020002");
        map.put("wangwu", "2020003");
        map.put("zhaoliu", "2020004");
        // 重复元素
        map.put("zhaoliu", "2020005");
        // 加入null值
        map.put(null, null);
        // 取出和遍历元素


        System.out.println("使用Iterator进行Map集合的遍历(EntrySet)：");
        // 使用迭代器进行遍历Map集合中的元素
        // 获取Map对象的所有的Entry集合set
        Set setEntries = map.entrySet();
        // 将对Map集合的遍历转变为对EntrySet集合的遍历
        Iterator it = setEntries.iterator();
        // 遍历 hasNext方法用于判定后面还有没有相关的数据；next方法用于取出当前遍历的位置的元素值
        while (it.hasNext()) {
            // 使用next方法取出当前元素的值  当前元素是一个 Map.Entry 静态内部类（接口）
            Object obj = it.next();
            // 进行强制类型转换
            Map.Entry en = (Map.Entry) obj;

            System.out.println(en.getKey() + "--" + en.getValue());
        }

        System.out.println("使用Iterator进行Map集合的遍历(KeySet)：");
        // 使用迭代器进行遍历Map集合中的元素
        // 获取Map对象的所有的Key集合set
        Set setKeys = map.keySet();
        // 将对Map集合的遍历转变为对EntrySet集合的遍历
        Iterator it0 = setKeys.iterator();
        // 遍历 hasNext方法用于判定后面还有没有相关的数据；next方法用于取出当前遍历的位置的元素值
        while (it0.hasNext()) {
            // 使用next方法取出当前元素的值  当前元素是map中键值对的key值
            Object obj = it0.next();
            System.out.println(obj + "--" + map.get(obj));
        }

        // 课下作业：
//        System.out.println("使用foreach增强型的for循环进行遍历：");
//        for (Object obj : set) {
//            System.out.println("  " + obj);
//        }
    }
}
